import {ProviderViewModel} from "../Provider/ProviderViewModel.js"
import {TDT} from './TDT.js'
import {AMap} from './AMap.js'
import {BaiduImageryProvider} from '../Provider/BaiduImageryProvider.js'
class Utils{
	static convertObjectClass(){
		
	}
	//判断url加上配置的代理
	static getProxyUrl(config) {
		if (!config.proxy || !config.url) return config;
		if (config.url instanceof Cesium.Resource) return config;
	
		var opts = {};
		for (var key in config) {
			opts[key] = config[key];
		}
		opts.url = new Cesium.Resource({
			url: opts.url,
			proxy: new Cesium.DefaultProxy(opts.proxy)
		});
		return opts;
	}
	static convertTerrainLayer(options){
		let terrain = Cesium.defaultValue(options, {});
		//无地形
		if('none'==terrain.type){
			return new Cesium.EllipsoidTerrainProvider({ ellipsoid: Cesium.Ellipsoid.WGS84});
		}
		//标准xyz服务
		else if('xyz'==terrain.type){
			return new Cesium.CesiumTerrainProvider({
				url:Cesium.defaultValue(terrain.url,""),
			})
		}
		//ArcGIS地形服务
		if('arcgis'==terrain.type){
			let param={
				url:Cesium.defaultValue(terrain.url,"https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer"),
			};
			if(Cesium.defined(terrain.token)){
				param.token=terrain.token
			}
			if(Cesium.defined(terrain.ellipsoid)){
				param.ellipsoid=Cesium.defaultValue(terrain.ellipsoid,Cesium.Ellipsoid.WGS84)
			}
			return new Cesium.ArcGISTiledElevationTerrainProvider(param)
		}
		//cesium官方ion在线服务
		else if('ion'==terrain.type){
			return Cesium.createWorldTerrain({
				requestVertexNormals:Cesium.defaultValue(terrain.requestVertexNormals,false),
				requestWaterMask:Cesium.defaultValue(terrain.requestWaterMask,false),
				requestMetadata:Cesium.defaultValue(terrain.requestMetadata,true),
				ellipsoid:Cesium.defaultValue(terrain.ellipsoid,Cesium.Ellipsoid.WGS84),
				credit:Cesium.defaultValue(terrain.credit,"")
			})
		}
		//谷歌地球企业服务
		else if('gee'==terrain.type){
			if(Cesium.defined(terrain.proxy)){
				return new Cesium.GoogleEarthEnterpriseTerrainProvider ({
					metadata :new Cesium.GoogleEarthEnterpriseMetadata(new Cesium.Resource({
					   url:Cesium.defaultValue(terrain.url,'http://www.earthenterprise.org/3d'),
					   proxy: new Cesium.DefaultProxy(Cesium.defaultValue(terrain.proxy,'')),
					})),
					ellipsoid:Cesium.defaultValue(terrain.ellipsoid,Cesium.Ellipsoid.WGS84),
					credit:Cesium.defaultValue(terrain.credit,"")
				});
			}
			return new Cesium.GoogleEarthEnterpriseTerrainProvider ({
				metadata :new Cesium.GoogleEarthEnterpriseMetadata(Cesium.defaultValue(terrain.url,'http://www.earthenterprise.org/3d')),
				ellipsoid:Cesium.defaultValue(terrain.ellipsoid,Cesium.Ellipsoid.WGS84),
				credit:Cesium.defaultValue(terrain.credit,"")
			});
		}
		//vr地形服务
		else if('vr'==terrain.type){
			return new Cesium.VRTheWorldTerrainProvider({
				url:Cesium.defaultValue(terrain.url,"https://www.vr-theworld.com/vr-theworld/tiles1.0.0/73/"),
				ellipsoid:Cesium.defaultValue(terrain.ellipsoid,Cesium.Ellipsoid.WGS84),
				credit:Cesium.defaultValue(terrain.credit,"")
			});
		}
		else{
			console.error("未知类型，默认显示!");
			return new Cesium.EllipsoidTerrainProvider({});
		}
	}
	static convertImageryLayer(options){
		
		if('tdt'==options.type){
			return TDT.convertImageryLayer(options);
		}
		
		if('amap'==options.type){
			return AMap.convertImageryLayer(options);
		}
		if('baidu'==options.type){
			return new BaiduImageryProvider(options);
		}
		if('osm'==options.type){
			var _url = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';
			if (options.proxy) //存在代理时
				_url = (0, this.getProxyUrl)({ url: _url.replace('{s}', 'a'), proxy: options.proxy }).url;
			return new Cesium.UrlTemplateImageryProvider({
				url: _url,
				subdomains: "abc",
				maximumLevel: 18
			});
		}
		if('bing'==options.type){
			var _url = 'https://dev.virtualearth.net';
			if (options.proxy) //存在代理时
				_url = (0, _util.getProxyUrl)({ url: _url, proxy: options.proxy }).url;
			//无标记影像 Aerial,
			//有英文标记影像   AerialWithLabels,
			//矢量道路  Road 
			//OrdnanceSurvey,
			//CollinsBart
			var style = options.layer || Cesium.BingMapsStyle.Aerial;
			return new Cesium.BingMapsImageryProvider({
				url: _url,
				key: options.key || 'AtkX3zhnRe5fyGuLU30uZw8r3sxdBDnpQly7KfFTCB2rGlDgXBG3yr-qEiQEicEc',
				mapStyle: style
			});
		}
		if('ion'==options.type){
			return new Cesium.IonImageryProvider({ 
				assetId : options.assetId ,
				accessToken : options.accessToken ,
			});
		}
		if('osm'==options.type){
			return new Cesium.OpenStreetMapImageryProvider({
				url :Cesium.defaultValue(options.url,'https://a.tile.openstreetmap.org/'),
				minimumLevel:Cesium.defaultValue(options.minimumLevel,0),
				maximumLevel:Cesium.defaultValue(options.minimumLevel,undefined),
				ellipsoid:Cesium.defaultValue(options.ellipsoid,Cesium.Ellipsoid.WGS84),
				credit:Cesium.defaultValue(options.credit,"")				
			})
		}
		else if('tms'==options.type){
			return new Cesium.TileMapServiceImageryProvider({
				url :Cesium.defaultValue(options.url, Cesium.buildModuleUrl('Assets/Textures/NaturalEarthII')),
				fileExtension :Cesium.defaultValue(options.fileExtension,'png'),
				credit:Cesium.defaultValue(options.credit,""),
				rectangle:Cesium.defaultValue(options.rectangle,Cesium.Rectangle.MAX_VALUE),
				minimumLevel:Cesium.defaultValue(options.minimumLevel,0),
				maximumLevel:Cesium.defaultValue(options.minimumLevel,undefined),
				tilingScheme:Cesium.defaultValue(options.tilingScheme,new Cesium.WebMercatorTilingScheme({
					numberOfLevelZeroTilesX:1,numberOfLevelZeroTilesY:1,
				})),
				tileWidth:Cesium.defaultValue(options.tileWidth,256),
				tileHeight:Cesium.defaultValue(options.tileHeight,256),
				ellipsoid:Cesium.defaultValue(options.ellipsoid,Cesium.Ellipsoid.WGS84),
				flipXY:Cesium.defaultValue(options.flipXY,false)			
			})
		}
		else if('arcgis'==options.type){
			let arcGisMap={
				url :Cesium.defaultValue(options.url, 'https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer'),
			};
			if(Cesium.defined(options.token)){
				arcGisMap.token=Cesium.defaultValue(options.token,"")
			}
			if(Cesium.defined(options.tileDiscardPolicy)){
				arcGisMap.tileDiscardPolicy=Cesium.defaultValue(options.tileDiscardPolicy,"")
			}
			if(Cesium.defined(options.usePreCachedTilesIfAvailable)){
				arcGisMap.usePreCachedTilesIfAvailable=Cesium.defaultValue(options.usePreCachedTilesIfAvailable,true)
			}
			if(Cesium.defined(options.layers)){
				arcGisMap.layers=Cesium.defaultValue(options.layers,undefined)
			}
			if(Cesium.defined(options.enablePickFeatures)){
				arcGisMap.enablePickFeatures=Cesium.defaultValue(options.enablePickFeatures,true)
			}
			if(Cesium.defined(options.rectangle)){
				arcGisMap.rectangle=Cesium.defaultValue(options.rectangle, Cesium.Rectangle.MAX_VALUE)
			}
			if(Cesium.defined(options.tilingScheme)){
				arcGisMap.tilingScheme=Cesium.defaultValue(options.tilingScheme,new Cesium.GeographicTilingScheme())
			}
			if(Cesium.defined(options.ellipsoid)){
				arcGisMap.ellipsoid=Cesium.defaultValue(options.ellipsoid,Cesium.Ellipsoid.WGS84)
			}
			if(Cesium.defined(options.credit)){
				arcGisMap.credit=Cesium.defaultValue(options.credit,"")
			}
			if(Cesium.defined(options.tileWidth)){
				arcGisMap.tileWidth=Cesium.defaultValue(options.tileWidth,256)
			}
			if(Cesium.defined(options.tileHeight)){
				arcGisMap.tileHeight=Cesium.defaultValue(options.tileHeight,256)
			}
			if(Cesium.defined(options.maximumLevel)){
				arcGisMap.maximumLevel=Cesium.defaultValue(options.maximumLevel,undefined)
			}
			return new Cesium.ArcGisMapServerImageryProvider(arcGisMap)
		}
		else if('bing'==options.type){
			let bingMap={
				url :Cesium.defaultValue(options.url, 'https://dev.virtualearth.net'),
			};
			if(Cesium.defined(options.token)){
				bingMap.key=Cesium.defaultValue(options.token,"get-yours-at-https://www.bingmapsportal.com/")
			}
			if(Cesium.defined(options.mapStyle)){
				bingMap.mapStyle =Cesium.defaultValue(options.mapStyle, Cesium.BingMapsStyle.AERIAL)
			}
			if(Cesium.defined(options.tileDiscardPolicy)){
				bingMap.tileDiscardPolicy=Cesium.defaultValue(options.tileDiscardPolicy,undefined)
			}
			if(Cesium.defined(options.ellipsoid)){
				bingMap.ellipsoid=Cesium.defaultValue(options.ellipsoid,Cesium.Ellipsoid.WGS84)
			}
			if(Cesium.defined(options.culture)){
				bingMap.culture=Cesium.defaultValue(options.culture,"")
			}
			if(Cesium.defined(options.tileProtocol)){
				bingMap.tileProtocol=Cesium.defaultValue(options.tileProtocol,"http")
			}
			return new Cesium.BingMapsImageryProvider(bingMap)
		}
		else if('gee'==options.type){
			let geeMap={
				url :Cesium.defaultValue(options.url, 'https://earth.localdomain'),
			};
			if(Cesium.defined(options.channel)){
				geeMap.channel=Cesium.defaultValue(options.channel,1008)
			}
			if(Cesium.defined(options.path)){
				geeMap.path =Cesium.defaultValue(options.path, "/default_map")
			}
			if(Cesium.defined(options.maximumLevel)){
				geeMap.maximumLevel=Cesium.defaultValue(options.maximumLevel,undefined)
			}
			if(Cesium.defined(options.ellipsoid)){
				geeMap.ellipsoid=Cesium.defaultValue(options.ellipsoid,Cesium.Ellipsoid.WGS84)
			}
			if(Cesium.defined(options.tileDiscardPolicy)){
				geeMap.tileDiscardPolicy=Cesium.defaultValue(options.tileDiscardPolicy,undefined)
			}
			return new Cesium.GoogleEarthEnterpriseMapsProvider(geeMap)
		}
		else if('single'==options.type || 'image'==options.type){
			let singleMap={
				url :Cesium.defaultValue(options.url, 'https://earth.localdomain'),
			};
			if(Cesium.defined(options.rectangle)){
				singleMap.rectangle=Cesium.defaultValue(options.rectangle,Cesium.Rectangle.MAX_VALUE)
			}
			if(Cesium.defined(options.ellipsoid)){
				singleMap.ellipsoid=Cesium.defaultValue(options.ellipsoid,Cesium.Ellipsoid.WGS84)
			}
			if(Cesium.defined(options.credit)){
				singleMap.credit=Cesium.defaultValue(options.credit,"")
			}
			return new Cesium.SingleTileImageryProvider(singleMap)
		}
		else if('wms'==options.type){
			let wmsMap={
				url :Cesium.defaultValue(options.url, ''),
			};
			if(Cesium.defined(options.layers)){
				wmsMap.layers=Cesium.defaultValue(options.layers,"")
			}
			if(Cesium.defined(options.parameters)){
				wmsMap.parameters=Cesium.defaultValue(options.parameters,Cesium.WebMapServiceImageryProvider.DefaultParameters)
			}
			if(Cesium.defined(options.getFeatureInfoParameters)){
				wmsMap.getFeatureInfoParameters=Cesium.defaultValue(options.getFeatureInfoParameters,Cesium.WebMapServiceImageryProvider.GetFeatureInfoDefaultParameters)
			}
			if(Cesium.defined(options.enablePickFeatures)){
				wmsMap.enablePickFeatures=Cesium.defaultValue(options.enablePickFeatures,true)
			}
			if(Cesium.defined(options.getFeatureInfoFormats)){
				wmsMap.getFeatureInfoFormats=Cesium.defaultValue(options.getFeatureInfoFormats,Cesium.WebMapServiceImageryProvider.DefaultGetFeatureInfoFormats)
			}
			if(Cesium.defined(options.rectangle)){
				wmsMap.rectangle=Cesium.defaultValue(options.rectangle,Cesium.Rectangle.MAX_VALUE)
			}
			if(Cesium.defined(options.tilingScheme)){
				wmsMap.tilingScheme=Cesium.defaultValue(options.tilingScheme,new Cesium.GeographicTilingScheme())
			}
			if(Cesium.defined(options.ellipsoid)){
				wmsMap.ellipsoid=Cesium.defaultValue(options.ellipsoid,Cesium.Ellipsoid.WGS84)
			}
			if(Cesium.defined(options.tileWidth)){
				wmsMap.tileWidth=Cesium.defaultValue(options.tileWidth,256)
			}
			if(Cesium.defined(options.tileHeight)){
				wmsMap.tileHeight=Cesium.defaultValue(options.tileHeight,256)
			}
			if(Cesium.defined(options.minimumLevel)){
				wmsMap.minimumLevel=Cesium.defaultValue(options.minimumLevel,0)
			}
			if(Cesium.defined(options.maximumLevel)){
				wmsMap.maximumLevel=Cesium.defaultValue(options.maximumLevel,undefined)
			}
			if(Cesium.defined(options.crs)){
				wmsMap.crs=Cesium.defaultValue(options.crs,undefined)
			}
			if(Cesium.defined(options.srs)){
				wmsMap.srs=Cesium.defaultValue(options.srs,undefined)
			}
			if(Cesium.defined(options.credit)){
				wmsMap.credit=Cesium.defaultValue(options.credit,"")
			}
			if(Cesium.defined(options.subdomains)){
				wmsMap.subdomains=Cesium.defaultValue(options.subdomains,'abc')
			}
			if(Cesium.defined(options.clock)){
				wmsMap.clock=Cesium.defaultValue(options.clock,undefined)
			}
			if(Cesium.defined(options.times)){
				wmsMap.times=Cesium.defaultValue(options.times,undefined)
			}
			return new Cesium.WebMapServiceImageryProvider(wmsMap)
		}
		else if('wmts'==options.type){
			let wmtsMap={
				url :Cesium.defaultValue(options.url, ''),
			};
			if(Cesium.defined(options.format)){
				wmtsMap.format=Cesium.defaultValue(options.format,'image/jpeg')
			}
			if(Cesium.defined(options.layer)){
				wmtsMap.layer=Cesium.defaultValue(options.layer,"")
			}
			if(Cesium.defined(options.style)){
				wmtsMap.style=Cesium.defaultValue(options.style,"")
			}
			if(Cesium.defined(options.tileMatrixSetID)){
				wmtsMap.tileMatrixSetID=Cesium.defaultValue(options.tileMatrixSetID,"")
			}
			if(Cesium.defined(options.tileMatrixLabels)){
				wmtsMap.tileMatrixLabels=Cesium.defaultValue(options.tileMatrixLabels,undefined)
			}
			if(Cesium.defined(options.clock)){
				wmtsMap.clock=Cesium.defaultValue(options.clock,undefined)
			}
			if(Cesium.defined(options.times)){
				wmtsMap.times=Cesium.defaultValue(options.times,undefined)
			}
			if(Cesium.defined(options.dimensions)){
				wmtsMap.dimensions=Cesium.defaultValue(options.dimensions,undefined)
			}
			if(Cesium.defined(options.subdomains)){
				wmtsMap.subdomains=Cesium.defaultValue(options.subdomains,'abc'	)
			}
			if(Cesium.defined(options.rectangle)){
				wmtsMap.rectangle=Cesium.defaultValue(options.rectangle,Cesium.Rectangle.MAX_VALUE)
			}
			if(Cesium.defined(options.tilingScheme)){
				wmtsMap.tilingScheme=Cesium.defaultValue(options.tilingScheme,undefined)
			}
			if(Cesium.defined(options.ellipsoid)){
				wmsMap.ellipsoid=Cesium.defaultValue(options.ellipsoid,Cesium.Ellipsoid.WGS84)
			}
			if(Cesium.defined(options.tileWidth)){
				wmtsMap.tileWidth=Cesium.defaultValue(options.tileWidth,256)
			}
			if(Cesium.defined(options.tileHeight)){
				wmtsMap.tileHeight=Cesium.defaultValue(options.tileHeight,256)
			}
			if(Cesium.defined(options.minimumLevel)){
				wmtsMap.minimumLevel=Cesium.defaultValue(options.minimumLevel,0)
			}
			if(Cesium.defined(options.maximumLevel)){
				wmtsMap.maximumLevel=Cesium.defaultValue(options.maximumLevel,undefined)
			}
			if(Cesium.defined(options.credit)){
				wmtsMap.credit=Cesium.defaultValue(options.credit,"")
			}
			return new Cesium.WebMapTileServiceImageryProvider(wmtsMap)
		}
		else if('xyz'==options.type){
			let xyzMap={
				url :Cesium.defaultValue(options.url, ''),
			};
			if(Cesium.defined(options.options)){
				xyzMap.options=Cesium.defaultValue(options.options,undefined)
			}
			if(Cesium.defined(options.pickFeaturesUrl)){
				xyzMap.pickFeaturesUrl=Cesium.defaultValue(options.pickFeaturesUrl,undefined)
			}
			if(Cesium.defined(options.urlSchemeZeroPadding)){
				xyzMap.urlSchemeZeroPadding=Cesium.defaultValue(options.urlSchemeZeroPadding,undefined)
			}
			if(Cesium.defined(options.subdomains)){
				xyzMap.subdomains=Cesium.defaultValue(options.subdomains,'abc')
			}
			if(Cesium.defined(options.tileWidth)){
				xyzMap.tileWidth=Cesium.defaultValue(options.tileWidth,256)
			}
			if(Cesium.defined(options.tileHeight)){
				xyzMap.tileHeight=Cesium.defaultValue(options.tileHeight,256)
			}
			if(Cesium.defined(options.minimumLevel)){
				xyzMap.minimumLevel=Cesium.defaultValue(options.minimumLevel,0)
			}
			if(Cesium.defined(options.maximumLevel)){
				xyzMap.maximumLevel=Cesium.defaultValue(options.maximumLevel,undefined)
			}
			if(Cesium.defined(options.rectangle)){
				xyzMap.rectangle=Cesium.defaultValue(options.rectangle,Cesium.Rectangle.MAX_VALUE)
			}
			if(Cesium.defined(options.ellipsoid)){
				xyzMap.ellipsoid=Cesium.defaultValue(options.ellipsoid,Cesium.Ellipsoid.WGS84)
			}
			if(Cesium.defined(options.credit)){
				xyzMap.credit=Cesium.defaultValue(options.credit,"")
			}
			if(Cesium.defined(options.hasAlphaChannel)){
				xyzMap.hasAlphaChannel=Cesium.defaultValue(options.hasAlphaChannel,true)
			}
			if(Cesium.defined(options.getFeatureInfoFormats)){
				xyzMap.getFeatureInfoFormats=Cesium.defaultValue(options.getFeatureInfoFormats,undefined)
			}
			if(Cesium.defined(options.enablePickFeatures)){
				xyzMap.enablePickFeatures=Cesium.defaultValue(options.enablePickFeatures,true)
			}
			if(Cesium.defined(options.customTags)){
				xyzMap.customTags=Cesium.defaultValue(options.customTags,undefined)
			}
			return new Cesium.UrlTemplateImageryProvider(xyzMap)
		}else{
			console.error('未知图层！');
			return null;
		}
	}
	static getImageryProviderViewModels(items){
		var imageryViewModels = [];
		if(items){
			for(var item of items){
				if (item.type == "group" && item.layers == null) continue;
				if(item.type == "group"){
					let layers=[];
					for(var layer of item.layers){
						layers.push(Utils.convertImageryLayer(layer));
					}
					imageryViewModels.push(new ProviderViewModel({
						 name : item.name,
						 iconUrl : item.iconUrl,
						 tooltip : item.tooltip,
						 layers:layers,
						 creationFunction : function creationFunction() {
							 return layers;
						 }
					 }));
				}
				else{
					let imageryLayer=Utils.convertImageryLayer(item);
					imageryViewModels.push(new ProviderViewModel({
						 name : item.name,
						 iconUrl : item.iconUrl,
						 tooltip : item.tooltip,
						 layers:[imageryLayer],
						 creationFunction : function creationFunction() {
							 return imageryLayer;
						 }
					 }));
				}
			}
		}
		else{
			let imageryLayer=new Cesium.TileMapServiceImageryProvider({
				 url : Cesium.buildModuleUrl('Assets/Textures/NaturalEarthII')
			 });
			 imageryViewModels.push(new ProviderViewModel({
				 name : 'Natural Earth\u00a0II',
				 iconUrl : Cesium.buildModuleUrl('Widgets/Images/ImageryProviders/naturalEarthII.png'),
				 tooltip : 'Natural Earth II, darkened for contrast.\nhttp://www.naturalearthdata.com/',
				 layers:[imageryLayer],
				 creationFunction : function creationFunction() {
					 return imageryLayer;
				 }
			 }));
		}
		return imageryViewModels;
	}
	
	// static getImageryProviderViewModels(datas){
	// 	var imageryViewModels = [];
	// 	if(datas){
	// 		for(var imagery of datas){
	// 			let imageryLayer=Utils.convertImageryLayer(imagery.params);
	// 			imageryViewModels.push(new ProviderViewModel({
	// 			     name : imagery.name,
	// 			     iconUrl : imagery.iconUrl,
	// 			     tooltip : imagery.tooltip,
	// 				 layer:imageryLayer,
	// 			     creationFunction : function creationFunction() {
	// 			         return imageryLayer;
	// 			     }
	// 			 }));
	// 		}
	// 	}
	// 	else{
	// 		let imageryLayer=new Cesium.TileMapServiceImageryProvider({
	// 			 url : Cesium.buildModuleUrl('Assets/Textures/NaturalEarthII')
	// 		 });
	// 		 imageryViewModels.push(new ProviderViewModel({
	// 		     name : 'Natural Earth\u00a0II',
	// 		     iconUrl : Cesium.buildModuleUrl('Widgets/Images/ImageryProviders/naturalEarthII.png'),
	// 		     tooltip : 'Natural Earth II, darkened for contrast.\nhttp://www.naturalearthdata.com/',
	// 			 layer:imageryLayer,
	// 		     creationFunction : function creationFunction() {
	// 		         return imageryLayer;
	// 		     }
	// 		 }));
	// 	}
	// 	return imageryViewModels;
	// }
	static getTerrainProviderViewModels(datas) {
		var terrainViewModels = [];
		if(datas){
			for(var terrain of datas){
				let terrainLayer=Utils.convertTerrainLayer(terrain.params);
				terrainViewModels.push(new ProviderViewModel({
				     name : terrain.name,
				     iconUrl : terrain.iconUrl,
				     tooltip : terrain.tooltip,
					 category:  terrain.category,
					 layer:terrainLayer,
				     creationFunction : function creationFunction() {
				         return terrainLayer;
				     }
				 }));
			}
		}
		else{
			let terrainLayer=Utils.convertTerrainLayer({
				type: 'none',
			});
			terrainViewModels.push(new ProviderViewModel({
				name: '无地形',
				iconUrl: Cesium.buildModuleUrl('Widgets/Images/TerrainProviders/Ellipsoid.png'),
				tooltip: 'WGS84标准椭球，即 EPSG:4326',
				category: '',
				layer:terrainLayer,
				creationFunction: function creationFunction() {
					return terrainLayer;
				}
			}));
		}
		return terrainViewModels;
	}
	static createModel(options){
		
	}
}
export { Utils};